# !/usr/bin/env python
# -*- coding: utf-8 -*-
# ///////////////////////////////////////////////////////////////
# @File    :   common.py
# @Time    :   2024/08/17 10:15:39
# @Author  :   kai.luo
# @Version :   1.0.0
# @Desc    :   Provide a public function library
# ///////////////////////////////////////////////////////////////
# type: ignore
from PIL import Image
import re
from PySide6.QtWidgets import *
from PySide6.QtGui import *
from PySide6.QtCore import *
from PySide6.QtUiTools import QUiLoader


def getImageSize(img_path: str):
    """
    获取图片的大小
    Args:
        img_path (str): 图片路径
    """
    with Image.open(img_path) as img:
        # 获取图像的尺寸（宽度和高度）
        return img.size


def loadStyle(app):
    """加载样式"""
    with open('ui/mainUI.qss', 'r+', encoding='utf-8') as f:
        app.setStyleSheet(f.read())


def getArea():
    chongqin = ['重庆', '万州', '黔江', '涪陵', '渝中', '大渡口', '江北', '沙坪坝', '九龙坡', '南岸', '北碚', '渝北', '巴南',
                '长寿', '江津', '合川', '永川', '南川', '綦江', '大足', '璧山', '铜梁', '潼南', '荣昌', '开州', '梁平', '武隆']
    sichuan = ['四川', '成都', '锦江', '青羊', '金牛', '武侯', '成华', '龙泉驿', '青白江', '新都', '温江', '双流', '郫都', '新津', '简阳', '都江堰', '彭州', '邛崃',
               '崇州', '金堂', '大邑', '蒲江', '自贡', '攀枝花', '泸州', '德阳', '绵阳', '广元', '遂宁', '内江', '乐山', '南充', '眉山', '宜宾', '广安', '达州', '雅安', '巴中', '资阳']

    return chongqin, sichuan


def isExistValue(val, data):
    """
    判断字典中对应的key是否有值
    Args:
        val (_type_): _description_
    """


def getMaxLine(data: list):
    """
    获取二维数组中最大数目的行
    Args:
        data (list): _description_

    Returns:
        _type_: _description_
    """
    max_len = 0
    for item in data:
        if max_len < len(item):
            max_len = len(item)

    return max_len


def sortedLineData(data: list):
    """
    根据一个值进行排序
    Args:
        data (list): _description_
    """
    for line_data in data:
        for i in range(len(line_data)-1):
            for j in range(len(line_data)-1-i):
                posy_1 = line_data[j][0][0][0]
                posy_2 = line_data[j+1][0][0][0]
                if int(posy_1) > int(posy_2):
                    line_data[j], line_data[j+1] = line_data[j+1], line_data[j]

    return data


def replaceSingleWidget(layout, old_widget, new_widget):
    """
    替换layout中的小组件
    Args:
        layout (_type_): _description_
        old_widget (_type_): _description_
        new_widget (_type_): _description_
    """
    # 查找旧 widget 的位置
    for i in range(layout.rowCount()):
        for j in range(layout.columnCount()):
            item = layout.itemAtPosition(i, j)
            if item and item.widget() == old_widget:
                # 移除旧 widget
                layout.removeWidget(old_widget)
                old_widget.deleteLater()

                # 插入新 widget
                layout.addWidget(new_widget, i, j)
                return


def replaceWidget(layout, old_widget):
    """
    替换layout中的小组件
    Args:
        layout (_type_): _description_
        old_widget (_type_): _description_
        new_widget (_type_): _description_
    """
    # 加载 Qt Designer 设计的新的 QWidget 组件
    ui_file = QFile(r"D:\HS_Product\pyside6_ocr_system\ui\UltrasonicUI.ui")
    ui_file.open(QFile.ReadOnly)

    loader = QUiLoader()
    new_widget = loader.load(ui_file)
    ui_file.close()

    if new_widget:

        # 移除旧的 QWidget 并将新的 QWidget 添加到布局中
        layout.removeWidget(old_widget)
        old_widget.deleteLater()  # 删除旧的 QWidget

        # 将新的 QWidget 添加到布局中
        layout.addWidget(new_widget, 2, 0, 1, 1)
